AI 慧眼功能指南
AI 慧眼是基于视觉大模型的智能 OCR(光学字符识别)系统,通过 AI 模型的视觉理解能力,实现非标准化图片的结构化数据提取。相比传统 OCR 接口,AI 慧眼具有更强的灵活性和适应性,可自定义识别字段,适用于各类票据、证件、表单等场景。
💡 核心优势
支持自定义字段提取、灵活的模板配置、可视化标注编辑、双模型协同识别
快速开始
前置准备
系统需要配置两类 AI 模型:
模型类型 作用 推荐模型 视觉模型 识别图片中的文字内容 Qwen-VL、GPT-4V、Claude-3 聊天模型 结构化数据提取(高级模式) GPT-4、Claude-3.5、Qwen-Plus
⚠ 模型配置
在使用 AI 慧眼前,请先在「模型管理」中配置好视觉模型和聊天模型
使用流程
创建 OCR 配置
以营业执照识别为例:
点击「新增」按钮
填写基本信息
字段 说明 示例 标题 OCR 配置名称 营业执照识别 描述 识别内容说明 从给定的图片中获取企业名称、成立时间信息
配置识别模板
上传底图
上传与待识别图片类似的模板图(如营业执照样本)
定义字段
在底图上标注需要提取的字段区域
支持的字段类型:
文本字段(String)
布尔字段(Boolean)
自定义类型
测试解析
上传实际图片进行测试,验证识别效果
技术架构
前端实现
前端页面位于 pigx-ui-pro/src/views/knowledge/ocr/,采用卡片列表展示 OCR 配置。
核心组件
主页面 (index.vue)
卡片式展示所有 OCR 配置,支持:
查看已标注的字段信息
编辑底图和字段配置
测试图片识别
导出配置
可视化标注页面 (KonvaPage.vue)
基于分屏布局实现图片标注功能:
// 图片缩放和旋转
function handleWheel ( event : WheelEvent ) {
const delta = - Math . sign ( event . deltaY ) * SCALE_FACTOR
const newScale = scale . value + delta
// 限制缩放范围 0.1 - 10
scale . value = Math . max ( MIN_SCALE , Math . min ( MAX_SCALE , newScale ) )
}
function rotateImage ( angle : number ) {
rotation . value = ( rotation . value + angle + 360 ) % 360
}
控制面板 (components/ControlPanel.vue)
保存配置按钮
解析图片按钮
清空底图按钮
高级解析模式切换
数据展示 (components/DataDisplay.vue)
API 接口定义
// src/api/knowledge/ocr.ts
// 分页查询 OCR 配置列表
export function fetchList ( query ? : Object ) {
return request ( {
url : '/knowledge/ocr/page' ,
method : 'get' ,
params : query ,
} )
}
// 解析图片
export function parseObj ( obj ? : Object ) {
return request ( {
url : '/knowledge/ocr/parse' ,
method : 'post' ,
data : obj ,
timeout : 100000 , // 100秒超时
} )
}
// 新增配置
export function addObj ( obj ? : Object ) {
return request ( {
url : '/knowledge/ocr' ,
method : 'post' ,
data : obj ,
} )
}
后端实现
后端服务位于 pigx-knowledge 模块,支持两种识别模式。
请求处理流程
graph LR
A [前端上传图片] --> B [AiOcrConfController]
B --> C [AiOcrConfService]
C --> D {识别模式}
D --> |普通模式| E [视觉模型直接识别]
D --> |高级模式| F [视觉模型OCR]
F --> G [聊天模型结构化]
E --> H [JSONRepairUtil修复]
G --> H
H --> I [返回JSON结果]
核心代码
控制器 (AiOcrConfController.java)
@PostMapping ( "/parse" )
@HasPermission ( "knowledge_ocr_add" )
public R parse ( @RequestBody AiOcrConfEntity aiOcrConf ) {
return aiOcrConfService . parseImage ( aiOcrConf ) ;
}
服务层 (AiOcrConfServiceImpl.java)
识别逻辑分为两种模式:
1. 普通模式 (依赖视觉模型的结构化能力)
if ( YesNoEnum . NO . getCode ( ) . equals ( aiOcrConf . getHigherAnalyze ( ) ) ) {
// 构建 JSON Schema 用户消息
UserMessage userJsonMessage = UserMessage . from (
PromptBuilder . render ( OCR_IMAGE_USER_JSON ,
Map . of ( "jsonSchema" , getJsonSchema ( aiOcrConf , fieldDTOList ) )
)
)
// 使用视觉模型进行 OCR 识别
Pair < ChatModel , AiAssistantService > visionModel =
modelProvider . getAiVisionAssistant ( )
ChatResponse response = visionModel . getKey ( )
. chat ( systemMessage , userJsonMessage , userMessage )
// 修复 JSON 格式
return R . ok ( JSONRepairUtil . repair ( response . aiMessage ( ) . text ( ) ) )
}
2. 高级模式 (双模型协同)
// 第一步:视觉模型进行 OCR 文字识别
Pair < ChatModel , AiAssistantService > visionModel =
modelProvider . getAiVisionAssistant ( )
ChatResponse ocrResponse = visionModel . getKey ( )
. chat ( systemMessage , userMessage )
// 第二步:文本模型按 JSON Schema 提取结构化数据
Triple < ChatModel , AiAssistantService , String > jsonModel =
modelProvider . getAiJSONAssistant ( aiOcrConf . getChatModelName ( ) )
ChatResponse structuredResponse = jsonModel . getLeft ( )
. chat ( buildChatRequest ( confEntity , ocrResponse . aiMessage ( ) . text ( ) ,
fieldDTOList , jsonModel . getRight ( ) ) )
return R . ok ( JSONRepairUtil . repair ( structuredResponse . aiMessage ( ) . text ( ) ) )
💡 双模型协同优势
高级模式将 OCR 识别和结构化提取分离,可以使用不同模型的优势,提高识别准确率和字段提取精度
JSON Schema 构建
系统根据用户定义的字段自动构建 JSON Schema:
private JsonSchema getJsonSchema ( AiOcrConfEntity confEntity ,
List < LlmOCRFieldDTO > fieldDTOList ) {
JsonObjectSchema . Builder builder = JsonObjectSchema . builder ( )
. description ( confEntity . getOcrPrompt ( ) )
// 遍历字段列表构建 Schema
fieldDTOList . forEach ( field -> {
if ( "Boolean" . equals ( field . getType ( ) ) ) {
builder . addBooleanProperty ( field . getKey ( ) , field . getDescription ( ) )
} else {
builder . addStringProperty ( field . getKey ( ) , field . getDescription ( ) )
}
} )
return builder . build ( )
}
提示词模板
OCR 系统提示词 (ocr-image.st)
你是一个专业的 OCR 文字识别助手。
请仔细识别图片中的所有文字内容。
OCR 用户 JSON 提示词 (ocr-image-user-json.st)
请从图片中提取以下字段信息,严格按照 JSON Schema 格式返回:
{jsonSchema}
OCR 系统 JSON 提示词 (ocr-system-json.st)
你是一个数据提取专家,擅长从文本中提取结构化数据。
请严格按照 JSON Schema 格式输出结果。
进阶功能
高级解析模式
普通模式 高级模式
使用单一视觉模型完成识别和结构化,速度快,成本低,适合字段简单的场景
切换方式:在字段配置界面开启「高级解析」开关
字段类型支持
类型 说明 示例 String 文本字段 企业名称、地址、联系方式 Boolean 布尔字段 是否盖章、是否过期
应用场景
营业执照识别
企业名称
统一社会信用代码
法定代表人
成立日期
经营范围
身份证识别
发票识别
表单识别
常见问题
识别结果不准确
💡 优化建议
上传清晰的高分辨率图片
确保底图模板与实际图片相似
使用高级解析模式提高准确率
在字段描述中添加更详细的说明
JSON 格式错误
系统内置 JSONRepairUtil 自动修复常见格式问题,如:
解析超时
⚠ 超时处理
默认超时时间为 100 秒,如遇大图片或复杂识别可能超时,建议:
压缩图片大小(推荐 2MB 以内)
使用更快的模型
减少识别字段数量
模型选择建议
场景 视觉模型 聊天模型 说明 简单票据 Qwen-VL - 普通模式即可 复杂证件 GPT-4V GPT-4 高级模式,提高准确率 手写表单 Claude-3 Claude-3.5 手写识别能力强 批量处理 Qwen-VL Qwen-Plus 成本优化